import java.io.IOException;
import java.util.Date;

/**
 * @ClassName DateIntervals
 * @Description TODO
 * @Author wuzmf
 * @Date 2018/5/28 20:14
 * @Version 1.0
 **/
public class DateIntervals {
	public static void main(String[] args) throws IOException {
		Date start1 = new Date("2018/05/10");
		Date end1 = new Date("2018/08/10");

		Date start2 = new Date("2018/05/30");
		Date end2 = new Date("2018/06/01");
		String coincidence = getDayCoincidence(start1, end1, start2, end2);
		System.out.printf("===" + coincidence);
	}

	/**
	 * 计算两个日期的相差天数(d1-d2)
	 */
	public static String getDayDifference(Date d1, Date d2) {
		StringBuffer ds = new StringBuffer();
		try {
			long num = (d1.getTime() - d2.getTime()) / 1000;
			long days = num / (3600 * 24);
			if (days > 0) {
				ds.append(days);
			}
		} catch (Exception e) {
			ds = new StringBuffer("");
			e.printStackTrace();
		}
		return ds.toString();
	}


	/**
	 * 这里共有2个时间段（b1-----e1）【b2-----e2】，4个时间点； 相当于两条线段(b代表起点，e代表端点，b<=e)，4个端点。 可分3种情况：
	 * 1.不相交。（b1-----e1）【b2-----e2】（b1-----e1）。if(e1<b2||b1>e2)此时，重合天数为零。 2.相交。
	 * 情况一：（b1---【b2---e1）----e2】          if(b1<b2&&e1<e2&&e1>b2) 情况二：【b2---(b1---e2】----e1)
	 * if(b1>b2&&b1<e2&&e2<e1) 3.包含：计算较短的时间段日期长度。 （b1---【b2-----e2】--e1）			   if(b1<b2&&e1>e2)
	 * 【b2---（b1-----e1）--e2】			   if(b1>b2&&e1<e2)
	 *
	 * @param begindate1 开始日期
	 * @param enddate1 结束日期
	 * @param begindate2 开始日期
	 * @param enddate2 结束日期
	 */
	public static String getDayCoincidence(Date begindate1, Date enddate1, Date begindate2,
			Date enddate2) {
		long b1 = begindate1.getTime();
		long e1 = enddate1.getTime();
		long b2 = begindate2.getTime();
		long e2 = enddate2.getTime();
		assert (b1 < e1 && b2 < e2);
		String coincidenceday;
		if (b1 <= b2 && e1 >= e2) {
			//（b1---【b2-----e2】--e1）
			System.out.println("1包含2");
			coincidenceday = getDayDifference(enddate2, begindate2);
		} else if (b1 >= b2 && e1 <= e2) {
			//【b2---（b1-----e1）--e2】
			System.out.println("2包含1");
			coincidenceday = getDayDifference(enddate1, begindate1);
		} else if (b1 >= b2 && b1 <= e2 && e2 <= e1) {
			//【b2---(b1---e2】----e1)
			System.out.println("相交");
			coincidenceday = getDayDifference(enddate2, begindate1);
		} else if (b1 <= b2 && e1 <= e2 && e1 >= b2) {
			//（b1---【b2---e1）----e2】
			System.out.println("相交");
			coincidenceday = getDayDifference(enddate1, begindate2);
		} else if (e1 <= b2 || b1 >= e2) {
			coincidenceday = "0";
		} else {
			coincidenceday = "";
			System.out.println("意料外的日期组合，无法计算重合天数！");
		}
		System.out.println("重合天数为[" + coincidenceday + "]天。");
		return coincidenceday;
	}
}
